package com.zsrt.java.day20161227.wrl.homework.demo06;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 汇总
 * @author Administrator
 */
public class Summary {
	
	/**
	 * 06:要求
	 * string 数组 11 个值
	 *开始：0人
	 *   数字1：表示增加1人  Scanner
	 *    	2：删除  Scanner  
	 *     	3：修改 “请输入需要修改的人：”   “输入修改后的名字”
	 *     	4：查询 ：“”	输出 ：  名字+下标/名字+-1
	 *     	5：退出
	 *----------------------------------
	 *分析：
	 *		1.一个长度为11的String数组
	 *		2.数字1~5分别代表增、删、改、差、退出，以Scanner 键盘输入
	 *		3.增加：每次增加1人，输入名字
	 *		4.删除：每次删除1人
	 *		5.修改：输入被修改和修改后的名字
	 *		6.查询：根据名称查询
	 *				有这个人：输出 名字+下标
	 *				没这个人：输出 名字+-1
	 *		7.退出程序        
	 *  
	 * @param args
	 */
	public static void main(String[] args) {
		
		//1.一个长度为11的String数组
		String[] peopleArray = new String[11];
		
		Scanner input = new Scanner(System.in);
		
		boolean judge = true;
		while(judge){
			System.out.println("------------------------------------------------------------------------------");
			System.out.println("\t\t\t\t1. 增加");
			System.out.println("\t\t\t\t2. 删除");
			System.out.println("\t\t\t\t3. 修改");
			System.out.println("\t\t\t\t4. 查询");
			System.out.println("\t\t\t\t5. 退出");
			System.out.println("------------------------------------------------------------------------------");
			System.out.println("  数组中的元素："+Arrays.toString(peopleArray));
			System.out.println("------------------------------------------------------------------------------");
			System.out.print("--请输入你的选择：");
			
			//2.数字1~5分别代表增、删、改、差、退出，以Scanner 键盘输入
			int selNumber = input.nextInt();
			
			switch (selNumber) {
			case 1:	
				System.out.println("选择1.增加...");
				System.out.println("--请输入你需要添加的名字：");
				String addP = input.next();
				peopleArray = addPeople(peopleArray, addP);	
				break;
			case 2:	
				System.out.println("选择2.删除...");	
				System.out.println("--请输入你需要删除的名字：");
				String deleteP = input.next();
				peopleArray = deletePeople(peopleArray, deleteP);
				break;
			case 3:
				System.out.println("选择3.修改...");	
				System.out.println("--请输入被修改的名字：");
				String oldP = input.next();
				System.out.println("--请输入修改后的名字：");
				String updateP = input.next();
				peopleArray = updatePeople(peopleArray,oldP, updateP);
				break;
			case 4:	
				System.out.println("选择4.查询...");	
				System.out.println("--请输入你需要查询的名字：");
				String queryPeople = input.next();
				int index = queryPeople(peopleArray, queryPeople);
				System.out.println(queryPeople+":"+index);
				break;
			case 5:	
				System.out.println("--选择5.退出...");	
				judge = false;	
				break;
			default:
				System.out.println("--输入有误，重新输入");	
				break;
			}
		}
		System.out.println("程序结束运行...");
		input.close();
	}
	
	/**
	 * 根据名字修改数组中的名字
	 * 
	 * 已知：
	 * 		1被修改的名字
	 * 		2 修改后的名字
	 * 求： 	修改后的新数组
	 * 
	 * 	分析：
	 * 		 查找数组中是否存在被修改的名字
	 * 			存在：修改
	 * 			不存在：输出不存在
	 * 		
	 * @param peopleArray	原数组
	 * @param oldP	被修改的名字
	 * @param updateP 修改后的名字
	 * @return	修改后的新数组
	 */
	private static String[] updatePeople(String[] peopleArray, String oldP, String updateP) {
		
		int index = queryPeople(peopleArray, oldP);
		
		// 查找数组中是否存在被修改的名字
		if(index != -1){
			peopleArray[index] = updateP;
		}else{
			System.out.println("修改失败，不存在"+oldP+":"+index);
		}
		return peopleArray;
	}

	/**
	 * 查询是否存在 queryPeople
	 * 		   存在： 输出名字+index
	 * 		不存在：输出名字+ -1
	 * @param peopleArray
	 * @param queryP
	 * @return
	 */
	private static int queryPeople(String[] peopleArray, String queryP) {
		int peoCount = peoCount(peopleArray);
		int index = -1;
		for(int i = 0 ; i < peoCount; i++){
			
			//查询是否存在 queryPeople
			//存在
			if(peopleArray[i].equals(queryP)){
				index = i;
				break;
			}
		}
		return index;
	}

	/**
	 * 根据名字删除people
	 *  1 查询被删除名字的index
	 *  2 判断是否存在该名字
	 * 	       存在：  2.1 根据index删除
	 *  	   2.2  如果被删除的名字不是数组中名字的最后一个，后面的名字往前挪一步
	 *   不存在：输出不存在，返回数组
	 *  
	 * @param peopleArray 原来存放people的数组
	 * @param delP	被删除的people
	 * @return	删除delPeople后的数组
	 */
	private static String[] deletePeople(String[] peopleArray, String delP){
		
		int peoCount = peoCount(peopleArray);
		
		//1 查询被删除的名字的index
		int index = queryPeople(peopleArray, delP);
		
		//2 判断是否存在该名字
		if(index != -1){
			//2.1  根据index删除
			peopleArray[index] = null;
			
			//2.2 如果被删除的名字不是数组中名字的最后一个，后面的名字往前挪一步
			if(index != peoCount-1){
				for(int maxIndex = index; maxIndex < peoCount; maxIndex++){
					peopleArray[maxIndex] = peopleArray[maxIndex+1];
				}
			}
			System.out.println("名字删除成功:"+delP);
		}else{
			System.out.println("不存在该名字："+delP);
		}
		return peopleArray;
	}

	/**
	 * 添加1人
	 * @param peopleArray	原来存放people的数组
	 * @param addP 新增的people
	 */
	public static String[] addPeople(String[] peopleArray,String addP){
		int length = peopleArray.length;
		
		//1 先判断数组是否满人
		if(peopleArray[length-1] != null){
			
			//1.1 满了，输出f
			System.out.println("人数已满");
			
		}else{
			
			//1.2 不满，把newPeople存进去
			for(int i = 0; i < length; i++){
				if(peopleArray[i] == null){
					peopleArray[i] = addP;
					break;
				}
			}
		}
		return peopleArray;
//		System.out.println(Arrays.toString(peopleArray));
	}
	
	/**
	 * 根据数组，返回名字的个数
	 * @param pA	数组
	 * @return	名字的个数
	 */
	public static int peoCount(String[] pA){
		int index = 0;
		for(int i = 0; i < pA.length; i++){
			if(pA[i] != null){
				index = i+1;
			}
		}
		return index;
	}
}
